﻿#pragma once
#include <chrono>
#include <string>
#include <iostream>

namespace cho =  std::chrono;

//使用高精度计时器
//计时器
class CTimeMeter
{
public:
	CTimeMeter() ;
	
	// reset方法
	void Reset();
 
	// 输出经过的时间，定义为模板函数
	template<typename Duration=cho::milliseconds>   // 默认输出毫秒ms
	int64_t Elapsed() const
	{
		return cho::duration_cast<Duration>(cho::high_resolution_clock::now() - m_startTime).count();
	}
 
	// 输出微妙
	int64_t ElapsedMicroseconds();
 
	// 输出纳秒
	int64_t ElapsedNanoseconds();
 
	// 输出秒
	int64_t ElapsedSeconds();
 
	// 输出分minute
	int64_t ElapsedMinutes();
 
	// 输出时hour
	int64_t ElapsedHours();
private:
	cho::time_point<cho::high_resolution_clock> m_startTime;
};


//打印使用时间
template<typename Duration=cho::milliseconds>
class DumpUseTime
{
public:
    DumpUseTime(const std::string & strMsg):m_msg(strMsg),m_beg()
    {
        std::cout << m_msg << " 开始" << std::endl;
    }

    ~DumpUseTime()
    {
        std::cout << m_msg << ",使用时间:" << m_beg.Elapsed<Duration>()  << std::endl;
    }
private:
	CTimeMeter m_beg;
	std::string m_msg;
};